package it.polimi.politics.ejb.managers;

import it.polimi.politics.dto.CandidaturaDTO;
import it.polimi.politics.dto.ElezioniDTO;
import it.polimi.politics.dto.PartitoDTO;
import it.polimi.politics.dto.UtentiDTO;
import it.polimi.politics.ejb.entities.Candidatura;
import it.polimi.politics.ejb.entities.Elezioni;
import it.polimi.politics.ejb.entities.Group;
import it.polimi.politics.ejb.entities.Partito;
import it.polimi.politics.ejb.entities.Utenti;
import it.polimi.politics.ejb.entities.Voto;
import it.polimi.politics.managers.ElezioniManager;

import javax.annotation.Resource;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJBContext;
import javax.ejb.Local;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 * Session Bean implementation class ElezioniMgrBean
 */
@Stateless
public class ElezioniMgrBean implements ElezioniManager {
	
	@PersistenceContext
    private EntityManager em;
	
	@Resource
	private EJBContext context;
	
	

   /* @Override
    public void addElezioni(ElezioniDTO elezioni) {
        Elezioni newElezioni = new Elezioni(elezioni);
        em.persist(newElezioni);
        
    }*/

    @Override
	public void updateElezioni(ElezioniDTO elezione) {
		em.merge(new Elezioni(elezione));
	}

    @Override
	public ElezioniDTO getElezioni() {
		Elezioni elezione = em.find(Elezioni.class, 1);
		ElezioniDTO elezioniDTO = convertToDTO(elezione);
		return elezioniDTO;
	}
    
	public Elezioni find(int id) {
    	return em.find(Elezioni.class, id);
    }
	
	public ElezioniDTO convertToDTO(Elezioni elezioni){
		ElezioniDTO elezioniDTO = new ElezioniDTO();
		elezioniDTO.setDatafinecandidature(elezioni.getDatafinecandidature());
		elezioniDTO.setDatafineelezioni(elezioni.getDatafineelezioni());
		elezioniDTO.setDatainiziocandidature(elezioni.getDatainiziocandidature());
		elezioniDTO.setDatainizioelezioni(elezioni.getDatainizioelezioni());
		elezioniDTO.setIdelezione(elezioni.getIdelezione());
		return elezioniDTO;
	}

	
	@Override
	public void creaVoto(PartitoDTO     partito, 
						 UtentiDTO      politico1,
						 UtentiDTO      politico2,
						 UtentiDTO      politico3) {
		
		Voto v = new Voto();
		Partito		part	 = new Partito(partito);
		Utenti		pol1	 = new Utenti(politico1);
		Utenti		pol2	 = new Utenti(politico2);
		Utenti		pol3	 = new Utenti(politico3);
		
		v.setPartito(part);
		v.setIdpolitico1(Integer.parseInt(pol1.getIDUtente()));
		v.setIdpolitico2(Integer.parseInt(pol2.getIDUtente()));
		v.setIdpolitico3(Integer.parseInt(pol3.getIDUtente()));
		
		em.merge(v);
		
	}

	@Override
	public void creaVoto(PartitoDTO part, String[] selectedPolitici) {
		
		Voto v = new Voto();
		Partito		parti	 = new Partito(part);
		
		v.setPartito(parti);
		v.setIdPolitici(selectedPolitici);
		/*v.setIdpolitico1(Integer.parseInt(pol1.getIDUtente()));
		v.setIdpolitico2(Integer.parseInt(pol2.getIDUtente()));
		v.setIdpolitico3(Integer.parseInt(pol3.getIDUtente()));
		*/
		em.merge(v);
	}	
	
}

